package com.echat.messagesender.sender.sms.impl.baseutil;

import com.echat.messagesender.sender.sms.bean.Echat253Config;
import com.echat.messagesender.sender.util.HttpUtil;
import com.echat.messagesender.sender.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.Properties;

/**
 * Created by xiaoyu on 2016/2/2.
 * 253短信发送平台工具类
 */
public class Sms253Util {

    private static Logger logger = LoggerFactory.getLogger(AliSmsUtil.class);

    private interface Action {
        String SMSMessages = "/send";
    }

    private interface Parameter {
        String account = "un";//账号
        String password = "pw";//密码
        String mobiles = "phone";//接收短信的手机
        String content = "msg";//发送的消息内容
        String responseStatus = "rd";//是否需要反馈状态
        String extendNo = "ex";
    }

    private interface ResultStatusCode {
        int success = 0;
    }


    /**
     * 发送短息
     *
     * @param to      必选参数 短信接收端手机号码集合，用英文逗号分开，每批发送的手机号数量不得超过100个
     * @param content 必选参数 自定义短信内容
     * @return
     */
    public static String sendSimpleSMS(Echat253Config echat253Config, String to, String content) {
        return sendSMS0(echat253Config, to, content, null, null);
    }

    /**
     * 发送短信模板请求
     *
     * @param to         必选参数 短信接收端手机号码集合，用英文逗号分开，每批发送的手机号数量不得超过100个
     * @param templateId 必选参数 模板Id
     * @param params     可选参数 内容数据，用于替换模板中{序号}
     * @return
     */
    public static String sendTemplateSMS(Echat253Config echat253Config, String to, String templateId, Map params) {
        return sendSMS0(echat253Config, to, null, templateId, params);
    }

    /**
     * 发送短信模板请求
     *
     * @param to         必选参数 短信接收端手机号码集合，用英文逗号分开，每批发送的手机号数量不得超过100个
     * @param templateId 必选参数 模板Id
     * @param params     可选参数 内容数据，用于替换模板中{序号}
     * @return
     */
    private static String sendSMS0(Echat253Config echat253Config, String to, String content, String templateId, Map params) {
        if (StringUtils.isEmpty(content)) {
            throw new IllegalArgumentException("短信内容(smsContent)或者模板ID(templateId) 其中必填1个");
        }
        String result = "";

        Properties parameters = new Properties();
        if (echat253Config == null) {
            throw new IllegalArgumentException("短信配置为空 253");
        }
        parameters.put(Parameter.account, echat253Config.getLoginName());
        parameters.put(Parameter.password, echat253Config.getPassword());
        parameters.put(Parameter.mobiles, to);
        parameters.put(Parameter.content, content);
        parameters.put(Parameter.responseStatus, "1");
        String requetUrl = null;
        try {
            requetUrl = getHttpRequestBaseUrl(echat253Config, Action.SMSMessages);
            result = HttpUtil.post(requetUrl, parameters);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //截取到结果字符串并判断该字符串是否为"0","0"表示发送成功,若不为"0",则返回null
        String[] res = result.split(",|\n");
        return res[1].equals("0") ? "0" : null;
    }


    private static String getHttpRequestBaseUrl(Echat253Config config, String action) throws NoSuchAlgorithmException,
            UnsupportedEncodingException {
        StringBuffer url = new StringBuffer(config.getApiBaseUrl()).append(action);
        return url.toString();

    }

    public static void main(String[] strings) throws Exception {

    }
}
